package sv.com.servicio.generico;



	import java.util.ArrayList;
	import java.util.HashMap;
	import java.util.List;

	public interface DaoGenerico {

		
		/** Obtiene el numero total de registros que cumplen con los filtros indicados en "propiedades"
		 * @param clase
		 * @param propiedades
		 * @param valores
		 * @return
		 */
		@SuppressWarnings("unchecked")
		public Integer tamanoTotal(Class clase, String propiedades, ArrayList<Object> valores);
		
		/**Se le indica la clase que representa al objeto que se desea cargar sus registros y si se desea aplicar un ordenamiento, es a travez de "ordenarPor" y su respectivo "valorOrdenamiento".
		 * Ademas es permitido paginar. 
		 * @param clase: la clase que representa al objeto a buscar en la BD
		 * @param ordenarPor
		 * @param valor
		 * @param pagina
		 * @param bloque
		 * @return
		 */
		public List cargarTodos(Class clase, String ordenarPor, String valorOrdenamiento, int pagina, int bloque);
		public void agregar(Object objeto) throws Exception;
		public void modificar(Object objeto);
		public void eliminar(Object objeto, Long id);
		public void eliminar(Object objeto, String id);
		public void eliminar(Object objeto);
		
		/**Contiene de manera implicita el ordenamiento que viene del lado del Cliente.
		 * En propiedades se envia el conjunto de filtros a aplicar en un solo String, junto con sus respectivos "valores".
		 * Ademas es permitido paginar. 
		 * @param clase: la clase que representa al objeto a buscar en la BD
		 * @param propiedades
		 * @param valores
		 * @param pagina
		 * @param bloque
		 * @return
		 */
		public List buscarPorPropiedades(Class clase, String propiedades, ArrayList<Object> valores, int pagina, int bloque);
		
		
		public List realizarBusqueda(String hql, HashMap<String, Object> parametros);
		public Integer realizarBusquedaTamanoTotal(String hql, HashMap<String, Object> parametros);
		
		public List cargarTodosV2(Class clazz, HashMap<String, Object>parametros, int pagina, int bloque) throws Exception;
		public Integer tamanoTotalListaCargarTodosV2(Class clazz, HashMap<String,Object> parametros) throws Exception;
		
}
